package com.hcy.app.screen.cipher

import androidx.room.Dao
import androidx.room.Entity
import androidx.room.Insert
import androidx.room.PrimaryKey
import androidx.room.Query
import androidx.room.Update
import kotlinx.coroutines.flow.Flow

@Entity(tableName = "tb_notes")//定义数据表的名称
data class NoteItem( // 笔记信息
    @PrimaryKey(autoGenerate = true)
    var id: Long, // id
    var title: String, // 标题
    var content: String, // 内容
    var label: String, // 标签
    var createAt: Long, // 创建时间
    var updateAt: Long, // 更新时间
    var deleteAt: Long, // 删除时间，记录删除后会进入回收站，回收站的记录30天后才会被实际删除
    var secretId: Long=0, // 密钥ID
)

@Dao
interface NoteDao{
    @Query("select * from tb_notes ORDER BY updateAt DESC ")
    fun findAll(): Flow<List<NoteItem>> // 可以实时观察数据变化，直接使用 list返回的时数据快照，不能监视实时变化

    @Query(" delete from tb_notes where id IN (:ids) ")
    suspend fun delete(ids: List<Long>): Int

    @Insert
    suspend fun insert(item: NoteItem)

    @Update
    suspend fun update(item: NoteItem)

    @Query(" select * from tb_notes where id = :id ")
    suspend fun getById(id: Long): NoteItem


}


@Entity(tableName = "tb_secrets")
data class SecretItem( // 密钥信息
    @PrimaryKey(autoGenerate = true)
    var id: Long, // id
    var content: String, // 密钥内容，AES:密钥-vi ; RSA:私钥-公钥
    var conKey: String, // 密钥的密钥
    var prompt: String, // 密钥提示信息
    var algorithm: String, // 密钥算法
    var remark: String, // 密钥备注信息
    var createAt: Long, // 创建时间
    var updateAt: Long, // 更新时间
)

@Dao
interface SecretDao{
    @Query("select * from tb_secrets ORDER BY createAt DESC ")
    fun findAll(): Flow<List<SecretItem>> // 可以实时观察数据变化，直接使用 list返回的时数据快照，不能监视实时变化

    @Query(" delete from tb_secrets where id= :id ")
    suspend fun delete(id: Long)

    @Insert
    suspend fun insert(item: SecretItem)

    @Update
    suspend fun update(item: SecretItem)

    @Query(" select * from tb_secrets where id = :id ")
    suspend fun getById(id: Long): SecretItem

    @Query(" select title from tb_notes where secretId = :secretId ")
    suspend fun getBindNoteList(secretId: Long): List<String>

}


@Entity(tableName = "tb_contacts")
data class ContactItem( // 联系人
    @PrimaryKey(autoGenerate = true)
    var id: Long, // 联系人id
    var nickname: String, // 昵称
    var contactType: String, // 联系方式：短信、邮箱、微信
    var contactCode: String, // 联系方式对应的账号
    var certificate: String, // 联系方式对应的凭证信息
    var remark: String, // 备注信息
    var createAt: Long, // 创建时间
    var updateAt: Long, // 更新时间
)

@Dao
interface ContactDao{
    @Query("select * from tb_contacts ORDER BY createAt DESC ")
    fun findAll(): Flow<List<ContactItem>> // 可以实时观察数据变化，直接使用 list返回的时数据快照，不能监视实时变化

    @Query(" delete from tb_contacts where id= :id ")
    suspend fun delete(id: Long)

    @Insert
    suspend fun insert(item: ContactItem)

    @Update
    suspend fun update(item: ContactItem)

    @Query(" select * from tb_contacts where id = :id ")
    suspend fun getById(id: Long): ContactItem

}